package com.sxj.corejava.code10_异常;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 石小俊
 * @date 2025年02月20日
 */
public class Test04_抛出异常 {

    public static void main(String[] args) {
//        try {
//            test01();
//        } catch (ParseException e) {
//            System.out.println("该异常被方法调用处理了");
//        }
        try {
            test02(2, 0);
        } catch (Exception e) {
            System.out.println("该异常被方法调用者处理了,异常为:" + e.getMessage());
        }
    }

    /**
     * 方式一:捕获到对应异常之后再通过throw关键字抛出异常
     */
    public static void test01() throws ParseException {
        try {
            Date date = new SimpleDateFormat("yyyy-MM-dd").parse("20200202");
        } catch (ParseException e) {
            // 在此处处理异常
            // 如果不想处理,在捕获到异常之后可以抛出去,由方法调用者进行处理
            // 通过throw 异常对象 的方式将异常抛出去
            // 如果当前异常是运行时异常,则不需要throws
            // 如果当前异常是检查异常,则当通过throw抛出异常后,在方法声明中,也需要通过throws异常类型进行抛出
            throw e;
        }
    }

    /**
     * 不需要捕获异常,而是根据代码逻辑选择是否抛出异常
     * 例如:计算两数相除,此时的除数不能为0
     */
    public static int test02(int num, int num2) throws Exception {
        // 如果除数为0了,则抛出异常,交给方法调用者进行处理
        if (num2 == 0) {
            // 抛出异常
            throw new Exception("除数不能为0");
        }
        // 否则计算结果
        return num / num2;
    }
}
